/**
 * 封装微信小程序请求
 */
const app = getApp();
const BASE_URL = 'https://www.lovezwj.cn'; // 替换为实际的API地址

/**
 * 处理API返回结果的通用函数
 * @param {Object} res - API返回的结果
 * @returns {Promise} - 返回处理后的Promise
 */
function handleResponse(res) {
  return new Promise((resolve, reject) => {
    if (res.statusCode === 200) {
      const data = res.data;
      if (data.error === 0) {
        // 成功
        resolve(data.body);
      } else if (data.error === 401) {
        // 未登录，需要重新登录
        wx.showToast({
          title: '登录已过期，请重新登录',
          icon: 'none',
          duration: 2000
        });
        // 清除登录状态
        app.globalData.token = '';
        app.globalData.isLoggedIn = false;
        // 跳转到登录页
        wx.navigateTo({
          url: '/pages/login/login'
        });
        reject(new Error('登录已过期'));
      } else if (data.error === 500) {
        // 系统异常
        wx.showToast({
          title: '系统异常，请稍后再试',
          icon: 'none',
          duration: 2000
        });
        reject(new Error('系统异常'));
      } else {
        // 业务异常
        wx.showToast({
          title: data.message || '请求失败',
          icon: 'none',
          duration: 2000
        });
        reject(new Error(data.message || '请求失败'));
      }
    } else {
      // HTTP请求失败
      wx.showToast({
        title: '网络请求失败',
        icon: 'none',
        duration: 2000
      });
      reject(new Error('网络请求失败'));
    }
  });
}

/**
 * 发起请求的通用方法
 * @param {String} url - 请求地址
 * @param {Object} data - 请求参数
 * @param {String} method - 请求方法，默认POST
 * @returns {Promise} - 返回Promise
 */
function request(url, data = {}, method = 'POST') {
  return new Promise((resolve, reject) => {
    // 确保data不为空
    const requestData = Object.keys(data).length > 0 ? data : {};
    
    wx.request({
      url: `${BASE_URL}${url}`,
      data: requestData,
      method: method,
      header: {
        'content-type': 'application/json',
        'auth': app.globalData.token || ''
      },
      success: (res) => {
        handleResponse(res).then(resolve).catch(reject);
      },
      fail: (err) => {
        wx.showToast({
          title: '网络请求失败',
          icon: 'none',
          duration: 2000
        });
        reject(err);
      }
    });
  });
}

// 导出请求方法
module.exports = {
  request
}; 